home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / comm / tcp / Socks5.lha / Socks5 / src / include / socks5api.h < prev    next >
C/C++ Source or Header  |  1999-03-10  |  5KB  |  183 lines

  1. /* Copyright (c) 1995-1999 NEC USA, Inc.  All rights reserved.               */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6.  
  7. /*
  8.  * $Id: socks5api.h,v 1.25.4.5 1999/02/03 22:34:54 steve Exp $
  9.  */
  10.  
  11. #ifndef __SOCKS5API_H_
  12. #define __SOCKS5API_H_
  13.  
  14. #ifndef P
  15. #ifdef __STDC__
  16. #define P(x) x
  17. #else
  18. #define P(x) ()
  19. #endif
  20. #endif
  21.  
  22. #define S5_SERVER_NUM    16
  23. #define S5_ERRMSG_SIZE   128
  24. #define S5_ENTRY_SIZE    128
  25. #define S5_NAME_SIZE     64
  26. #define S5_OPTION_SIZE  256
  27. #define S5_APPNAME_SIZE  64
  28. #define S5_USERNAME_SIZE 128
  29. #define S5_HOSTNAME_SIZE 128
  30. #define S5_FILENAME_SIZE 256
  31. /*
  32. #define S5_ENTRY_SIZE    256
  33. #define S5_NAME_SIZE     256
  34. #define S5_APPNAME_SIZE  256
  35. #define S5_USERNAME_SIZE 256
  36. #define S5_HOSTNAME_SIZE 256
  37. #define S5_FILENAME_SIZE 1024
  38. */
  39.  
  40. #define S5InvalidIOHandle -1
  41. typedef int S5IOHandle;
  42.  
  43. struct sockaddr_name {
  44.     unsigned short sn_family;
  45.     unsigned short sn_port;
  46.     char sn_name[255];
  47. };
  48.  
  49. #define AF_S5NAME 0xff
  50.  
  51. union tagS5NetAddr {
  52.     struct sockaddr      sa;
  53.     struct sockaddr_in   sin;
  54.     struct sockaddr_name sn;
  55. #ifdef HAVE_NETINET6_IN6_H
  56.     struct sockaddr_in6  sin6;
  57. #endif
  58. };
  59.  
  60. typedef union tagS5NetAddr S5NetAddr;
  61.  
  62. struct tagS5Packet {
  63.     char *data;
  64.     int len, off;
  65.     int oob;
  66. };
  67.  
  68. typedef struct tagS5Packet S5Packet;
  69.  
  70. struct tagS5AuthInfo {
  71.     void *context;
  72.     int (*encode) P((S5Packet *, S5Packet *, int, void *));
  73.     int (*check)  P((S5Packet *, void *));
  74.     int (*clean)  P((void *));
  75. };
  76.  
  77. typedef struct tagS5AuthInfo S5AuthInfo;
  78.  
  79. struct tagS5IOInfo {
  80.     S5Packet ibuf, obuf;
  81.     S5AuthInfo auth;
  82.     S5IOHandle fd;
  83. };
  84.  
  85. typedef struct tagS5IOInfo S5IOInfo;
  86.  
  87. struct tagS5LinkInfo {
  88.     char srcName[S5_HOSTNAME_SIZE];
  89.     char dstName[S5_HOSTNAME_SIZE];
  90.     char retName[S5_HOSTNAME_SIZE];
  91.     char sckName[S5_HOSTNAME_SIZE];
  92.     char srcUser[S5_USERNAME_SIZE];
  93. #ifdef USERPROXYFIX
  94.     char logUser[S5_USERNAME_SIZE];
  95. #define S5RESV_USERNAMEPROXY_BIT 0
  96. #endif
  97.     char dstServ[S5_APPNAME_SIZE];
  98.  
  99.     unsigned char nextVersion;
  100.     unsigned char peerVersion;
  101.     unsigned char peerCommand;
  102.     unsigned char nextReserved;
  103.     unsigned char peerReserved;
  104.     unsigned char peerFlags;
  105.     unsigned char peerAuth;
  106.  
  107.     u_short clientPort;
  108.     
  109.     S5NetAddr srcAddr; /* source address                                    */
  110.     S5NetAddr dstAddr; /* destination address                               */
  111.     S5NetAddr retAddr; /* returned or real destination address              */
  112.     S5NetAddr bndAddr; /* source connection's inteface                      */
  113.     S5NetAddr intAddr; /* destination connection's interface                */
  114.     S5NetAddr sckAddr; /* Next step on the chain...                         */
  115.  
  116.     int inbc;          /* How many bytes have come in on this link          */
  117.     int outbc;         /* How many bytes have gone out on this link         */
  118.  
  119.     S5NetAddr altSckAddrs[S5_SERVER_NUM]; /* Alternative next steps in the chain...       */
  120.     int nAltSckAddrs;                     /* # of Alternative next steps in the chain...  */
  121. };
  122.  
  123. typedef struct tagS5LinkInfo S5LinkInfo;
  124.  
  125. struct tagS5CommandInfo{
  126.     void *option;
  127.     int (*sendpkt) P((S5Packet *, S5LinkInfo *, void *, int *));
  128.     int (*recvpkt) P((S5Packet *, S5LinkInfo *, void *, int *));
  129.     int (*clean)   P((S5LinkInfo *, void *));
  130. };
  131.  
  132. typedef struct tagS5CommandInfo S5CommandInfo;
  133.  
  134. struct tagS5FilterInfo { 
  135.     void *option; 
  136.     int (*filter) P((S5Packet *, S5Packet *, S5LinkInfo *, void *,int *, int *)); 
  137.     int (*clean)  P((void *)); 
  138. };
  139.  
  140. typedef struct tagS5FilterInfo S5FilterInfo;  
  141.  
  142.  
  143. #define S5_DIRECTION_IN      1
  144. #define S5_DIRECTION_OUT     2
  145. #define S5_DIRECTION_ANY     3
  146.  
  147. #define S5_ACTION_READ       1
  148. #define S5_ACTION_MORE_READ  2
  149. #define S5_ACTION_WRITE      3
  150. #define S5_ACTION_MORE_WRITE 4
  151. #define S5_ACTION_CLOSE      5
  152.  
  153. #define S5_AUTH_CLIENT       1
  154. #define S5_AUTH_SERVER       2
  155. #define S5_AUTH_BOTH         3
  156.  
  157. #define S5_ENCODE            0
  158. #define S5_DECODE            1
  159.  
  160. #define S5_SOCKS4      SOCKS4_VERSION
  161. #define S5_SOCKS5      SOCKS5_VERSION
  162.  
  163. #ifdef FOR_CLIENT
  164. #define APIPREFIX(x) S5C ## x
  165. #else
  166. #define APIPREFIX(x) S5S ## x
  167. #endif
  168.  
  169. #define CLOSESOCKET            REAL(close)
  170. #define RECVSOCKET(f, b, l, o) ((o)?REAL(recv)(f, b, l, o):REAL(read)(f, b, l))
  171. #define SENDSOCKET(f, b, l, o) ((o)?REAL(send)(f, b, l, o):REAL(write)(f, b, l))
  172. #define IOCTLSOCKET            ioctl
  173. #define READFILE               REAL(read)
  174. #define WRITEFILE              REAL(write)
  175.  
  176. #define SOCKETERROR(x)         x
  177. #define GETERRNO()             errno
  178. #define SETERRNO(x)            (errno =  (x))
  179. #define SETSOCKETERROR(x)      (errno =  (x))
  180. #define ISSOCKETERROR(x)       (errno == (x))
  181.  
  182. #endif
  183.